export enum ShootMode {
  DirectFire = 'DF', // 直射武器
  Guided = 'GD' // 制导武器
}
export enum ShipType {
  AircraftCarrier = 'CV', // 航空母舰
  Battleship = 'BB', // 战列舰
  Battlecruisers = 'BC', // 战列巡洋舰
  Cruiser = 'CR', // 巡洋舰
  Destroyer = 'DD', // 驱逐舰
  Frigate = 'FG' // 护卫舰
}
export enum Row {
  Front = 'Front',
  Middle = 'Middle',
  Back = 'Back'
}
// 阵营，只有敌方和我方
export enum Factions {
  Our,
  Enemy
}

// 武器信息
export interface Weaopn {
  name: string
  shootMode: ShootMode // 射击模式，直射或曲射
  attackSequence: [ShipType, ShipType, ShipType, ShipType, ShipType, ShipType] // 攻击序列（长度固定为6）(数组越靠前的，代表优先级越高)
  dpm: number // 每分钟伤害
}
// 武器型号（代表武器型号，不代表具体一把武器）
export interface WeaopnModel {
  id: string
  name: string
  shootMode: ShootMode // 射击模式，直射或曲射
  attackSequence: [ShipType, ShipType, ShipType, ShipType, ShipType, ShipType] // 攻击序列（长度固定为6）(数组越靠前的，代表优先级越高)
}

// 船体信息（这个是value Object）
export interface ShipTemplate {
  standRow: Row
  shipType: ShipType
}
// 舰船型号（这个是entity）
export interface WarShipModel {
  id: string
  name: string
  shipTemplate: ShipTemplate // 船体信息
  weaponList: WeaopnModel[] // 武器信息
}
// 以“船只型号 - 条数” 形式记录的 “舰队”（这个是entity）
export interface ModelFleet {
  id: string
  shipList: ModelShipGroup[]
}
// 舰船组（这个是value object）
export interface ModelShipGroup {
  warshipModel: WarShipModel
  count: number
}
// 新的 “分摊池” 类型（以 “船只型号” 和“武器型号”这俩新数据格式来记录）（这个是entity）
export interface SharePoolNew {
  id: string // uuid
  weaponModelId: string // 武器型号的UUID
  shipList: ModelShipGroup[] // 分摊池中的敌方舰船型号列表
  shareNumber: number // 当前分摊池中，有几条船分摊伤害
}

// 战舰对象
export interface Warship {
  name: string
  commandPoints: number
  shipTemplate: ShipTemplate // 船体信息
  weaponList: Weaopn[] // 武器信息
}
// 舰队
export interface Fleet {
  shipList: Warship[]
}
// 舰船组
export interface WarshipGroup {
  ship: Warship
  count: number
}
// 以另一种形式记录的“舰队”
export interface GroupFleet {
  shipGroup: WarshipGroup[]
}
// 分摊池（分摊池是一种输出数据结构，只作为计算的输出结果而存在）
export interface SharePool {
  weaponName: string
  shipList: Warship[] // 分摊池中的敌方舰船列表
  shareNumber: number // 当前分摊池中，有几条船分摊伤害
}
